package com.xyz.app.config;

import com.free.ext.web.spring.interceptor.WebExceptionInterceptor;
import com.free.ext.web.spring.messageconveter.CustomStringHttpMessageConverter;
import com.free.ext.web.spring.messageconveter.JsonHttpMessageConverter;
import com.free.ext.web.spring.paramresolve.PageSearchArgumentResolver;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Component
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
    {
        converters.add(new ByteArrayHttpMessageConverter());
        converters.add(new CustomStringHttpMessageConverter());
        converters.add(new JsonHttpMessageConverter());
        super.configureMessageConverters(converters);
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new PageSearchArgumentResolver());
        super.addArgumentResolvers(argumentResolvers);
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        // 异常处理拦截器
        registry.addInterceptor(new WebExceptionInterceptor());
    }

    //Default Servlet 支持
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    /*
       Default Servlet 支持
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
*/
    //跨域支持
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/*")
                .allowedOrigins("*")
                .allowedMethods("PUT", "DELETE", "GET", "POST");
    }



    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
